import Taro from '@tarojs/taro';

/**
 * 平台判断工具类 - 简化版
 * 专门用于 ThreeLevelDirectory 组件
 */
export class PlatformUtils {
    /**
     * 获取当前医院对象
     * @returns {object} 医院对象，包含 id、name、sysOrgCode 等属性
     */
    static getDefaultHospital(): any {
        try {
            const defaultHospital = JSON.parse(Taro.getStorageSync('defaultHospital') || '{}');
            return defaultHospital;
        } catch (error) {
            console.error('获取 defaultHospital 失败:', error);
            return {};
        }
    }

    /**
     * 获取当前医院ID
     * @returns {string} 医院ID
     */
    static getHospitalId(): string {
        const hospital = this.getDefaultHospital();
        return hospital?.id || '';
    }

    /**
     * 获取当前平台的 sysOrgCode
     * @returns {string} sysOrgCode 字符串
     */
    static getSysOrgCode(): string {
        try {
            const defaultHospital = JSON.parse(Taro.getStorageSync('defaultHospital') || '{}');
            return defaultHospital?.sysOrgCode || '';
        } catch (error) {
            // console.error('获取 sysOrgCode 失败:', error);
            return '';
        }
    }

    /**
     * 判断当前平台是否为安好
     * 根据 sysOrgCode 前6位判断：A01A03 是安好，其他是华声
     * @returns {boolean} true-安好平台，false-华声平台
     */
    static isAnHao(): boolean {
        try {
            const sysOrgCode = this.getSysOrgCode();
            return sysOrgCode.substring(0, 6) === 'A01A03';
        } catch (error) {
            // 默认返回华声平台
            return false;
        }
    }
}

/**
 * 存储工具类 - 简化版
 * 用于处理 localStg 不可用的情况
 */
export class StorageUtils {
    /**
     * 获取存储数据（兼容 localStg 格式）
     * @param key 存储键名
     * @returns 存储的值
     */
    static get(key: string): any {
        try {
            const json = Taro.getStorageSync(key);
            if (json) {
                // 尝试解析为 localStg 格式
                const storageData = JSON.parse(json);
                if (storageData && typeof storageData === 'object' && 'value' in storageData) {
                    // 检查是否过期
                    if (storageData.expire && storageData.expire < Date.now()) {
                        this.remove(key);
                        return null;
                    }
                    return storageData.value;
                }
                // 如果不是 localStg 格式，直接返回
                return storageData;
            }
            return null;
        } catch (error) {
            // console.error(`获取存储数据失败 [${key}]:`, error);
            return null;
        }
    }

    /**
     * 设置存储数据
     * @param key 存储键名
     * @param value 存储的值
     * @param expire 过期时间（秒）
     */
    static set(key: string, value: any, expire: number = 7 * 24 * 60 * 60): void {
        try {
            const storageData = {
                value,
                expire: expire ? new Date().getTime() + expire * 1000 : null
            };
            Taro.setStorageSync(key, JSON.stringify(storageData));
        } catch (error) {
            // console.error(`设置存储数据失败 [${key}]:`, error);
        }
    }

    /**
     * 删除存储数据
     * @param key 存储键名
     */
    static remove(key: string): void {
        try {
            Taro.removeStorageSync(key);
        } catch (error) {
            // console.error(`删除存储数据失败 [${key}]:`, error);
        }
    }
}

// 导出默认的 localStg 实例（如果原项目的 localStg 不可用）
export const localStg = StorageUtils;
